package com.scalar.chiptrack.adaptor.ikanos.asecl;

import com.scalar.chiptrack.jobs.JobHandler;
import com.scalar.chiptrack.adaptor.AdaptorConstants;
import com.scalar.chiptrack.adaptor.AdaptorUtils;
import com.scalar.chiptrack.adaptor.dao.AdaptorRunInfo;
import com.scalar.chiptrack.utils.Logger;
import com.scalar.chiptrack.users.VendorAdaptor;
import com.scalar.chiptrack.users.dao.AdaptorSetUpDAO;

import javax.mail.Message;

/**
 * Created by IntelliJ IDEA.
 * User: munugoti
 * Date: Jan 20, 2009
 * Time: 1:59:25 PM
 * To change this template use File | Settings | File Templates.
 */
public class ASECLPOP3Adaptor extends JobHandler implements AdaptorConstants
{
    private static final String HOST                = "mail.scalarsoft.com";

    public static final String FILE_NAME_WIP 	    = "WIP_REPORT";
    public static final String FILE_NAME_SHIP 	    = "SHIP_REPORT";
    public static final String FILE_NAME_YIELD 	    = "STDT_YIELD";
    public static final String FILE_NAME_DROPSHIP 	= "DROPSHIP";
    public static final String FILE_NAME_FGWIP 	    = "FG_WIP";
    public static final String FILE_NAME_CP_YIELD   = "IKA_BIN_ASECL";
    public static final String FILE_NAME_CP_SHIP    = "IKANOS_SHIPPING_CP_ALERT";
    public static final String FILE_NAME_ASSY_SHIP    = "IKA_CUST_INOUT";

    public static final String ADAPTOR_NAME         = "ASECL_WIP";

    private static final String SUBJECT_YIELD       = "Standard Test Yield Report";  //common for subject for all customers
    private static final String SUBJECT_WIP         = "Standard WIP Report";
    private static final String SUBJECT_SHIP        = "Shipment Report from ASECL";
    private static final String SUBJECT_DROPSHIP    = "Drop Ship Report from ASECL";
    private static final String SUBJECT_FGWIP       = "FG WIP Report from ASECL";
    private static final String SUBJECT_CP_YIELD    = "Ikanos-ASECL";
    private static final String SUBJECT_CP_SHIP     = "IKANOS Shipping CP Alert From ASECL";
    private static final String SUBJECT_ASSY_SHIP     = "IKA Assy Output Report";

    private Logger m_adaptorLogger      = null;
    private String m_dataOutputDir      = null;
    private String m_username           = null;
    private String m_password           = null;
    private int    m_adaptor_id         = -1;

    public ASECLPOP3Adaptor() throws Exception
    {
        try
        {
            VendorAdaptor vendorAdaptor = AdaptorSetUpDAO.getVendorAdaptorDetailsByVendorNameAndLocation( VENDOR_NAME_IKANOS_ASECL, LOCATION_TYPE_ASSEMBLY );

            m_username = vendorAdaptor.getUserId().trim();
            m_password = vendorAdaptor.getPassWord().trim();
            m_dataOutputDir = vendorAdaptor.getOutPutDirectory().trim();
            
            if (m_dataOutputDir != null)
            {
                if (m_dataOutputDir.endsWith("/") || m_dataOutputDir.endsWith("\\"))
                {
                    m_dataOutputDir = m_dataOutputDir + m_username;
                }
                else
                {
                    m_dataOutputDir = m_dataOutputDir + "/" + m_username;
                }
                AdaptorUtils.makeAllAdaptorDirs( m_dataOutputDir );
                m_adaptorLogger = AdaptorUtils.getAdaptorLogger( m_dataOutputDir, VENDOR_NAME_IKANOS_ASECL );
                AdaptorUtils.setLogger( m_adaptorLogger );
            }
        }
        catch (Exception se)
        {
            log("ERROR!! ERROR!! ERROR!! Exception while loading ASECL POP3 Adaptor Username, Password details from database, Exception: " + se);
            throw se;
        }
    }

    //Main Method
    public static void main(String[] args) throws Exception
    {
        new ASECLPOP3Adaptor().execute();
    }

    /**
     *
     * @throws Exception
     */
    public void execute() throws Exception
    {
        try
        {
            m_adaptor_id = AdaptorRunInfo.saveAdaptorLastUpdatedStatus( CONSTANT_ADAPTOR, ADAPTOR_NAME, CONSTANT_SUCCESS, -1);
            // Step 1
             // prints the version of Adaptor
            AdaptorUtils.printHeader( VENDOR_NAME_IKANOS_ASECL , CONSTANT_ADAPTOR );

            // Step 2
            // removes the old files out side done directory
            AdaptorUtils.removeOldFiles(m_dataOutputDir, m_adaptorLogger);
            // Step 3
            //Retrive All the Messages
            Message[] messages = AdaptorUtils.getAllPOP3InboxMessages( HOST, m_username, m_password);
            // Step 4
            // Retrieve & Saves the latest message
            AdaptorUtils.readLatestMessage( m_adaptor_id, messages, SUBJECT_WIP,    m_dataOutputDir, FILE_EXTN_XLS, FILE_NAME_WIP );
            //AdaptorUtils.readLatestDayMessages( m_adaptor_id, messages, SUBJECT_SHIP,   m_dataOutputDir, FILE_EXTN_XLS, FILE_NAME_SHIP );
            AdaptorUtils.readLatestMessage( m_adaptor_id, messages, SUBJECT_YIELD,    m_dataOutputDir, FILE_EXTN_CSV, FILE_NAME_YIELD );
            AdaptorUtils.readLatestMessage( m_adaptor_id, messages, SUBJECT_FGWIP,    m_dataOutputDir, FILE_EXTN_XLS, FILE_NAME_FGWIP );
            AdaptorUtils.readLatestMessage( m_adaptor_id, messages, SUBJECT_DROPSHIP,    m_dataOutputDir, FILE_EXTN_XLS, FILE_NAME_DROPSHIP );
            AdaptorUtils.readLatestMessage( m_adaptor_id, messages, SUBJECT_CP_YIELD,    m_dataOutputDir, FILE_EXTN_XLS, null );
            AdaptorUtils.readLatestMessage( m_adaptor_id, messages, SUBJECT_CP_SHIP,    m_dataOutputDir, FILE_EXTN_XLS, null );
            AdaptorUtils.readLatestMessage( m_adaptor_id, messages, SUBJECT_ASSY_SHIP,    m_dataOutputDir, FILE_EXTN_XLS, null );
        }
        catch (Exception e)
        {
            AdaptorUtils.removeOldFiles(m_dataOutputDir, m_adaptorLogger);
            AdaptorRunInfo.updatedAdaptorStatus( CONSTANT_FAILURE, m_adaptor_id);
            System.out.println("Exception while trying to connect and read data from " + HOST +" site: " + e);
            log("Exception while trying to connect and read data from " + HOST +" site: " + e);
            e.printStackTrace();
            throw e;
        }
    }

    private void log(String message)
    {

        if (message == null) return;

        if (m_adaptorLogger != null)
        {
            synchronized (m_adaptorLogger)
            {
                m_adaptorLogger.logDebug(message + LINE_SEPARATOR);
            }
        }
        else
        {
            System.out.println(message);
        }
    }

}

